package java6699.javafx.shopping;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;
/*
* 继承Application
* */
public class ShoppingWin6699 extends Application {
    private Label lblGet;
    private TextField tfPerson, tfBuy;
    private String marketName;
    private Object[] pList;
    public static void main(String[] args) {
        launch(args);
    }
   //重写start方法
    @Override
    public void start(Stage primaryStage) {
        marketName = "永辉超市";
        pList = new Object[]{"豆浆机","电视机","吹风机"};//初始化
        VBox root = new VBox(20);//创建树状结构
        Label lblStudent = new Label("212106699周梓希");//创建一个Label控件
        /*
         *设置边框的属性
         * @Paint 设置边框的颜色
         * @CornerRadii 设置边框的半径
         * @BorderWidths 设置边框的宽度
         * */
        BorderStroke bs = new BorderStroke(Paint.valueOf("#8FBC8F")
                , BorderStrokeStyle.DOTTED
                , new CornerRadii(10)
                , new BorderWidths(3));
        lblStudent.setBorder(new Border(bs));//将bs设置的边框应用在Label控件
        lblStudent.setPadding(new Insets(10));//Label控件插入10的边距

        //创建一个HBox,继承Pane，设置spacing=10,用于将其子项放在一个水平行中。
        HBox hPerson = new HBox(10);
        Label lblPerson = new Label("购物者：");
        tfPerson = new TextField();
        tfPerson.setPromptText("购物者姓名");//设置输入框的提示语，用来提示用户可以输入什么样的文本。
        hPerson.getChildren().addAll(lblPerson, tfPerson);//在HBox中添加多个控件
        //创建一个HBox,继承Pane，设置spacing=10,用于将其子项放在一个水平行中。
        HBox hBuy = new HBox(10);
        Label lblBuy = new Label("购买商品清单：");
        tfBuy = new TextField();
        tfBuy.setPrefWidth(420);//设置输入框的推荐宽
        tfBuy.setPromptText("用逗号分隔的商品名称");//设置输入框的提示语，用来提示用户可以输入什么样的文本。
        hBuy.getChildren().addAll(lblBuy, tfBuy);//在HBox中添加多个控件
        //创建一个Button按钮
        Button button = new Button("购买");
        lblGet = new Label();//创建一个Label控件
        root.getChildren().addAll(lblStudent,hPerson, hBuy, button, lblGet);
        root.setPadding(new Insets(20.0));
        root.setAlignment(Pos.TOP_CENTER);//设置输入框的对齐方式。
        //用根节点创建Scene
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);//为窗口指定Scene
        primaryStage.setTitle("超市购物");//设置串口标题
        primaryStage.show();
        //创建监听对象
        EventHandler<ActionEvent> handler = new  MyHandler();
        //注册监听
        button.setOnAction(handler);
    }
    private class MyHandler implements EventHandler<ActionEvent> {
        @Override
        public void handle(ActionEvent event) {
            String name = tfPerson.getText().trim();//获取购物者姓名
            Object[] list;  //创建购物清单数组
            //指定分隔符","或“，”对字符串进行切片存入数组
            list = tfBuy.getText().trim().split("[,，]");
            lblGet.setText(name + "在" + marketName + shopping(list));
        }
    }
    /**
     * 购买商品清单中的单个或多个商品
     * @param list 需要购买的商品清单
     * @return 已销售的商品名称，多个商品名称之间用逗号分隔
     */
    public String shopping(Object[] list) {
        StringBuilder successPro = new StringBuilder();  //成功购买到的商品名称
        int number = 0; //计数，用于判断购物清单内的商品是否都购买成功
        try {
            //将当前用户传入的购物清单遍历，逐个判断超市中是否有此商品，如果有则销售，否则不销售，继续下一个商品，直到结束
            for (Object o : pList) {
                for (Object value : list) {
                    if (o.equals(value)) {
                        successPro.append(value).append(",");
                        number += 1;
                    }
                }
            }
            if (number == list.length) {
                return "全部都买到";
            } else if (number == 0) {
                return "什么都没买到";
            } else{
                //截取掉最后一个逗号字符传返回购买的多个商品
                return "买到了：" + successPro.substring(0, successPro.length() - 1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "出错了";
        }
    }

}
